#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}
enum FUNCTION_TYPE{
    IDLE = 0,
    STR2HEX,
    HEX2STR,
    GENERATEMD5,
    STR2UTF8,
    UTF82STR,
    STR2UNICODE,
    STR2UNICODEBIG,
    UNICODE2STR,
    UNICODE2STRBIG,
    INT2IP,
    IP2INT,
};
class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    FUNCTION_TYPE fun_type;
    QString getInptr_str() const;
    void setInptr_str(const QString &value);

    QString getOut_str() const;
    void setOut_str(const QString &value);

    void clear_output_str(bool clean_input=false);
    void do_fun_init();
public slots:
    void OnStr2Hex();
    void OnHex2Str();
    void OnCoverBt();
    void OnClearBt();
    void Onrandom256();
    void OnMd5();
    void OnMd5File();
    void OnStr2Utf8();
    void OnUtf82Str();
    void OnStr2Unicode();
    void OnStr2UnicodeBig();
    void OnUnicode2Str();
    void OnUnicode2StrBig();
    void Onint2ip();
    void Onip2int();

private:
    QString do_str2hex(QString str);
    QString do_hex2str(QString str);
    QString do_generateMd5(QString str);
    QString do_str2utf8(QString str);
    QString do_utf82str(QString str);
    QString do_unicode2str(QString str, bool is_big_endian);
    QString do_str2unicode(QString str, bool is_big_endian);
    QString do_int2ip(QString str);
    QString do_ip2int(QString str);
    Ui::Widget *ui;
    QString inptr_str;
    QString out_str;
    QString sample_str;
};

#endif // WIDGET_H
